iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
AI & Data

[Computer Vision] 電腦視覺下的人臉系列 第 24

[Day 24] Facial Landmark: MTCNN

  • 分享至 

  • xImage
  •  

偵測人臉位置與人臉關鍵點,兩個混 合 在 一 起

MTCNN -- Multi-task Cascaded Convolutional Networks

從完成名稱可以看出一些端倪:

  • 多任務 (multi task):同時學習偵測人臉與辨識人臉關鍵點任務
  • 級聯 (Cascade):與Day9的哈爾特徵檢測法一樣,使用每一層計算的輸出當作下一層的輸入,從簡單的判斷開始去除不需要的區域,再慢慢深入去判斷需要的結果
  • 卷積網路 (Convolutional network):Day 18已簡單說明過,就是影像處理最常用到的神經網路結構

到這裡你已經知道MTCNN的精隨了,剩下的就是如何訓練MTCNN

但這部分是需要精心設計訓練資料,以及分階段訓練MTCNN (P-Net -> R-Net -> O-Net),

這裡我們只專注在如何使用,

Let's Go!

本文開始

  1. 開啟專案,在facial_landmark目錄下新增mtcnn_predictor.py
  2. 在你的Python環境中安裝
    • mtcnn (版本:0.1.1)
    • tensorflow (任意2.0以上版本)
  3. 打開mtcnn_predictor.py,輸入下面到目前為止最簡單的程式碼:
    import time
    
    import cv2
    import mtcnn
    from imutils.video import WebcamVideoStream
    
    
    def main():
        # 初始化模型
        detector = mtcnn.MTCNN()
    
        # 啟動WebCam
        vs = WebcamVideoStream().start()
        time.sleep(2.0)
    
        while True:
            frame = vs.read()
            rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            faces = detector.detect_faces(rgb)
            for face in faces:
                (x, y, w, h) = face['box']
                keypoints = face['keypoints']
                conf = face['confidence']
    
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
                cv2.putText(frame, f"confidence: {str(round(conf, 3))}", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 2)
    
                for (s0, s1) in keypoints.values():
                    cv2.circle(frame, (s0, s1), 2, (0, 0, 255), -1)
    
            cv2.imshow("Frame", frame)
            key = cv2.waitKey(1) & 0xFF
            if key == ord("q"):
                break
    
        # 清除用不到的物件
        cv2.destroyAllWindows()
        vs.stop()
    
    
    if __name__ == '__main__':
        main()
    
    
  4. 直接在terminal輸入python facial_landmark/mtcnn_predictor.py

mtcnn_1

這次我給模型更困難的辨識情況:

  • 離鏡頭更遠
  • 使用側面臉
  • 戴上口罩

但實際辨識結果你可以看到:不但辨識率有90%以上,也可以大致上辨別出眼、鼻、嘴等的位置。

而實際上,

FaceNet網路在訓練人臉辨識時也是使用MTCNN當作人臉偵測與人臉關鍵點任務使用

好工具,不學起來用嗎?

傳送門


上一篇
[Day 23] Facial Landmark
下一篇
[Day 25] Facial Alignment
系列文
[Computer Vision] 電腦視覺下的人臉30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言